package com.example.demo.service;

import com.example.demo.enumeration.ItemStatus;
import com.example.demo.pojo.vo.ItemDetailVO;
import com.example.demo.pojo.vo.PageVO;

import java.util.List;

public interface AdminService {
    /**
     * 根据管理员用户名查找管理员id
     * @param username 管理员用户名
     * @return 管理员id
     */
    Long selectIdByUsername(String username);

    /**
     * 检查管理员密码是否正确
     * @param username 管理员用户名
     * @param password 管理员输入的密码
     * @return 密码是否正确
     */
    boolean checkPassword(String username, String password);

    /**
     * 生成管理员jwt令牌并将其存储到redis
     * @param id 管理员id
     * @param username 管理员用户名
     * @return jwt令牌
     */
    String generateAdminToken(Long id, String username);

    /**
     * 获取当前登录的管理员id
     * @return 管理员id
     */
    Long getCurrentAdminId();

    /**
     * 删除目标管理员令牌
     * @param id 目标管理员的id
     */
    void deleteToken(Long id);

    /**
     * 分页查询需要审核的商品列表
     * @param page 当前页码
     * @return 带有商品列表信息的VO
     */
    PageVO getPendingItemList(int page);

    /**
     * 获取商品详细信息
     * @param itemId 目标商品的id
     * @return 带有商品详细信息的VO
     */
    ItemDetailVO getItemDetail(Long itemId);

    /**
     * 更新商品状态
     * @param itemId 目标商品id
     * @param status 商品新状态
     * @return 操作是否成功
     */
    boolean updateItemStatus(Long itemId, ItemStatus status);

    /**
     * 分页查询商品举报信息列表
     * @param page 当前页码
     * @return 带有举报信息数据的VO
     */
    PageVO getItemReportList(int page);

    /**
     * 分页查询商品评论举报信息列表
     * @param page 当前页码
     * @return 带有举报信息数据的VO
     */
    PageVO getCommentReportList(int page);

    /**
     * 根据商品id查找举报信息id列表
     * @param itemId 商品id
     * @return 举报信息id列表
     */
    List<Long> selectReportIdListByItemId(Long itemId);

    /**
     * 根据商品评论id查找举报信息id列表
     * @param commentId 商品评论id
     * @return 举报信息id列表
     */
    List<Long> selectReportIdListByCommentId(Long commentId);

    /**
     * 根据商品id删除举报信息
     * @param itemId 商品id
     * @return 操作是否成功
     */
    boolean deleteReportByItemId(Long itemId);

    /**
     * 根据商品评论id删除举报信息
     * @param commentId 评论id
     * @return 操作是否成功
     */
    boolean deleteReportByCommentId(Long commentId);
}
